#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e4+10;
int n,m,w;
bool st[N];
int c[N],d[N];
int cc[N],dd[N];
vector<int> vc[N];
int cnt;
int f[N];
int u,v;
void dfs(int x)
{
	st[x]=true;
	cc[cnt]+=c[x];dd[cnt]+=d[x];
	for(auto& e:vc[x])
	{
		if(!st[e]) dfs(e);
	}
}
int main()
{
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i]>>d[i];
	 } 
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v;
		vc[u].push_back(v);	
		vc[v].push_back(u);	
		//咱们图结构就是这样存的，必须两边都存 
	}
	for(int i=1;i<=n;i++)
	{
		if(!st[i])
		{
			//只要出现在捆绑包中就标记，因为只用买一次就行了 
			cnt++;
			dfs(i);
		}
	}
	for(int i=1;i<=cnt;i++)
	{
		for(int j=w;j>=cc[i];j--)
		{
			f[j]=max(f[j],f[j-cc[i]]+dd[i]);
		}
	 } 
	 cout<<f[w]<<endl;
	return 0;
 } 